package main

import (
	"fmt"
	"sort"
)

func main() {
	// map的基本用法
	ages := map[string]int{
		"alice":   31,
		"charlie": 34,
		"bob":     21,
		"duyus":   25,
	}
	ages["alice"] = 31         //添加或者就是修改
	delete(ages, "alice")      // 删除
	fmt.Println(ages["alice"]) // 这样就是直接查

	// 遍历的方法
	for name, age := range ages {
		fmt.Printf("%s\t%d\n", name, age)
	}

	// 判断key是否存在用
	_, ok := ages["bob"]
	if !ok { /* "bob" is not a key in this map; age == 0. */
		fmt.Println("age is missing")
	}

	// 排序输出
	var names []string
	for name := range ages {
		names = append(names, name)
	}
	sort.Strings(names)
	for _, name := range names {
		fmt.Printf("%s\t%d\n", name, ages[name])
	}

	// 闭包
	pos := adder()
	fmt.Println(pos(1)) // 1
	fmt.Println(pos(2)) // 3
	ad := adder()       // num重新 赋值 为 0
	fmt.Println(ad(3))  // 3

}

func adder() func(int) int {
	sum := 0 // 内部匿名函数应用外部变量 就叫 闭包
	fmt.Println("sum:", sum)
	return func(x int) int {
		sum += x
		return sum
	}
}
